package com.yehui.algorithm.sword;

import java.util.ArrayList;

/**
 * 输入一颗二叉树和一个整数，打印出二叉树中结点值的和为输入整数的所有路径。
 * 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
 * Created by XuChunH on 2016/9/16.
 */
public class FindPath {

    public ArrayList<ArrayList<Integer>> findPath(TreeNode root, int target) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<>();
        if(root == null){
            return result;
        }
        if(root.val == target){
            if (root.left == null && root.right == null) {
                ArrayList<Integer> path = new ArrayList<>();
                path.add(root.val);
                result.add(path);
            }
            return result;
        }
        if(root.left != null){
            ArrayList<ArrayList<Integer>> temp = findPath(root.left, target - root.val);
            if(temp.size() != 0){
                for (ArrayList<Integer> integers : temp) {
                    integers.add(0, root.val);
                    result.add(integers);
                }
            }
        }
        if(root.right != null){
            ArrayList<ArrayList<Integer>> temp = findPath(root.right, target - root.val);
            if(temp.size() != 0){
                for (ArrayList<Integer> integers : temp) {
                    integers.add(0, root.val);
                    result.add(integers);
                }
            }
        }
        return result;
    }

}
